package com.FundamentalDemos.ObjectOriented;

public class Test {
    public static void main(String[] args) {
        //创建Student类的对象
        Student stu1 = new Student();//无参数创建对象时,其实调用了默认无参构造器
        stu1.name = "张三";
        stu1.chinese = 100.0;
        stu1.math = 90.5;
        stu1.show();
        stu1.printTotalScore();
        stu1.printAverageScore();
        System.out.println("-----------------------");
        Student stu2 = new Student("李四", 99.5, 95);//用3参构造函数新建stu2
        stu2.show();
        stu2.printTotalScore();
        stu2.printAverageScore();
        System.out.println("-----------------------");
        stu1.showDefaultValue();
        System.out.println("----------- ------------");
        Student stu3 = new Student();//调用无参构造函数
        stu3.show();
        stu3 = stu1;//现在引用变量stu3与stu1指向同一个对象了
        stu3.show();
        System.out.println("-----------------------");
        stu3 = null;//引用变量赋空值
//        stu3.show();//报错空指针异常,方法调用 'show' 可能生成 'NullPointerException'
//Java有自动垃圾回收机制,当对象没有任何引用时,占用内存会被回收
        stu1.show();//stu3不再指向stu1指向的对象,但是stu1指向的对象本身依然存在


        System.out.println("-----------------------");
        /*
        在一个类中,this关键字代表的就是调用对象本身,相当于一个引用变量里面存的是指向的对象的地址,只不过它是在类内部使用的,用于泛指任何new出来的对象,与类外指向new出来的对象的引用变量名完全一致
         */
        stu1.printThis();//在类中直接打印this会显示本对象的地址
        System.out.println(stu1);//等价于直接打印对象
        stu2.printThis();//显然两者地址不同
        System.out.println(stu2);
        System.out.println("-----------------------");


        stu1.isPass(60);
        stu1.isPass(95);
        System.out.println("-----------------------");

    }
}

